/**
 * @description: 此插件可支持process.env.xxx获取 .env文件的环境变量
 */
const fs = require('fs');
const path = require('path');

// 根据运行环境加载对应的 .env 文件
const env = process.env.EGG_SERVER_ENV || process.env.NODE_ENV;
let envFilePath = '.env';

if (env) {
  const specificEnvFile = `.env.${env}`;
  if (fs.existsSync(path.resolve(__dirname, '..', specificEnvFile))) {
    envFilePath = specificEnvFile;
  }
}

require('dotenv').config({ path: path.resolve(__dirname, '..', envFilePath) })

/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
// console.info('process.env.EGG_SERVER_ENV', process.env.EGG_SERVER_ENV)
// console.info('process.env.NODE_ENV', process.env.NODE_ENV)
// console.info('Loaded env file:', envFilePath)

module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1757580702147_8028';

  // 中间件
  config.middleware = [ 'mysqlCtx', 'errorHandler', 'accessLog', 'ratelimit'];

  // mysql配置
  config.mysql = {
    // 单数据库信息配置
    client: {
      // host
      host: process.env.MYSQL_HOST,
      // 端口号
      port: process.env.MYSQL_PORT,
      // 用户名
      user: process.env.MYSQL_USER,
      // 密码
      password: process.env.MYSQL_PASSWORD,
      // 数据库名
      database: process.env.MYSQL_DATABASE,
    },
    // 是否加载到 app 上，默认开启
    app: true,
    // load into agent, default is close
    agent: false,

  };

  //跨域配置  注意：会和nginx的配置有冲突，线上可以注释掉此处
  exports.cors = {
    origin: '*', // 或者指定具体的域名如 http://localhost:3000
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',
    credentials: true, // 如果需要携带cookie等凭证信息
  };

  // 限流中间件配置
  config.ratelimit = {
    max: 2, // 每1秒钟最多2个请求
    windowMs: 1 * 1000, // 时间窗口，1秒
    // 仅对/api开头的路由生效
    match: '/api',
  };

  //开启前置代理模式。注意，开启此模式后，应用就默认处于反向代理之后
  config.proxy = true;

  // add your user config here
  const userConfig = {

  };

  return {
    ...config,
    ...userConfig,
  };
};
